{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Adversarial-Robustness-Toolbox for LightGBM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import lightgbm as lgb\n",
    "\n",
    "from sklearn.datasets import load_iris\n",
    "\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "from art.estimators.classification import LightGBMClassifier\n",
    "from art.attacks.evasion import ZooAttack\n",
    "from art.utils import load_mnist\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1 Training LighGBM classifier and attacking with ART Zeroth Order Optimization attack"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_adversarial_examples(x_train, y_train, num_classes):\n",
    "    \n",
    "    # Create and fit LightGBM model\n",
    "    num_round = 10\n",
    "    param = {'objective': 'multiclass', 'metric': 'multi_logloss', 'num_class': num_classes}\n",
    "    train_data = lgb.Dataset(x_train, label=y_train)\n",
    "    model = lgb.train(param, train_data, num_round, valid_sets=[])\n",
    "\n",
    "    # Create ART classifier for LightGBM\n",
    "    art_classifier = LightGBMClassifier(model=model)\n",
    "\n",
    "    # Create ART Zeroth Order Optimization attack\n",
    "    zoo = ZooAttack(classifier=art_classifier, confidence=0.0, targeted=False, learning_rate=1e-1, max_iter=20,\n",
    "                    binary_search_steps=10, initial_const=1e-3, abort_early=True, use_resize=False, \n",
    "                    use_importance=False, nb_parallel=1, batch_size=1, variable_h=0.2)\n",
    "\n",
    "    # Generate adversarial samples with ART Zeroth Order Optimization attack\n",
    "    x_train_adv = zoo.generate(x_train)\n",
    "\n",
    "    return x_train_adv, model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.1 Utility functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_data(num_classes):\n",
    "    x_train, y_train = load_iris(return_X_y=True)\n",
    "    x_train = x_train[y_train < num_classes][:, [0, 1]]\n",
    "    y_train = y_train[y_train < num_classes]\n",
    "    x_train[:, 0][y_train == 0] *= 2\n",
    "    x_train[:, 1][y_train == 2] *= 2\n",
    "    x_train[:, 0][y_train == 0] -= 3\n",
    "    x_train[:, 1][y_train == 2] -= 2\n",
    "    \n",
    "    x_train[:, 0] = (x_train[:, 0] - 4) / (9 - 4)\n",
    "    x_train[:, 1] = (x_train[:, 1] - 1) / (6 - 1)\n",
    "    \n",
    "    return x_train, y_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_results(model, x_train, y_train, x_train_adv, num_classes):\n",
    "    \n",
    "    fig, axs = plt.subplots(1, num_classes, figsize=(num_classes * 5, 5))\n",
    "\n",
    "    colors = ['orange', 'blue', 'green']\n",
    "\n",
    "    for i_class in range(num_classes):\n",
    "\n",
    "        # Plot difference vectors\n",
    "        for i in range(y_train[y_train == i_class].shape[0]):\n",
    "            x_1_0 = x_train[y_train == i_class][i, 0]\n",
    "            x_1_1 = x_train[y_train == i_class][i, 1]\n",
    "            x_2_0 = x_train_adv[y_train == i_class][i, 0]\n",
    "            x_2_1 = x_train_adv[y_train == i_class][i, 1]\n",
    "            if x_1_0 != x_2_0 or x_1_1 != x_2_1:\n",
    "                axs[i_class].plot([x_1_0, x_2_0], [x_1_1, x_2_1], c='black', zorder=1)\n",
    "\n",
    "        # Plot benign samples\n",
    "        for i_class_2 in range(num_classes):\n",
    "            axs[i_class].scatter(x_train[y_train == i_class_2][:, 0], x_train[y_train == i_class_2][:, 1], s=20,\n",
    "                                 zorder=2, c=colors[i_class_2])\n",
    "        axs[i_class].set_aspect('equal', adjustable='box')\n",
    "\n",
    "        # Show predicted probability as contour plot\n",
    "        h = .01\n",
    "        x_min, x_max = 0, 1\n",
    "        y_min, y_max = 0, 1\n",
    "\n",
    "        xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))\n",
    "\n",
    "        Z_proba = model.predict(np.c_[xx.ravel(), yy.ravel()])\n",
    "        Z_proba = Z_proba[:, i_class].reshape(xx.shape)\n",
    "        im = axs[i_class].contourf(xx, yy, Z_proba, levels=[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],\n",
    "                                   vmin=0, vmax=1)\n",
    "        if i_class == num_classes - 1:\n",
    "            cax = fig.add_axes([0.95, 0.2, 0.025, 0.6])\n",
    "            plt.colorbar(im, ax=axs[i_class], cax=cax)\n",
    "\n",
    "        # Plot adversarial samples\n",
    "        for i in range(y_train[y_train == i_class].shape[0]):\n",
    "            x_1_0 = x_train[y_train == i_class][i, 0]\n",
    "            x_1_1 = x_train[y_train == i_class][i, 1]\n",
    "            x_2_0 = x_train_adv[y_train == i_class][i, 0]\n",
    "            x_2_1 = x_train_adv[y_train == i_class][i, 1]\n",
    "            if x_1_0 != x_2_0 or x_1_1 != x_2_1:\n",
    "                axs[i_class].scatter(x_2_0, x_2_1, zorder=2, c='red', marker='X')\n",
    "        axs[i_class].set_xlim((x_min, x_max))\n",
    "        axs[i_class].set_ylim((y_min, y_max))\n",
    "\n",
    "        axs[i_class].set_title('class ' + str(i_class))\n",
    "        axs[i_class].set_xlabel('feature 1')\n",
    "        axs[i_class].set_ylabel('feature 2')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2 Example: Iris dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### legend\n",
    "- colored background: probability of class i\n",
    "- orange circles: class 1\n",
    "- blue circles: class 2\n",
    "- green circles: class 3\n",
    "- red crosses: adversarial samples for class i"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ZOO: 100%|██████████| 100/100 [00:04<00:00, 22.39it/s]\n"
     ]
    },
    {
     "data": {
      "image/png": "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FNlVpEQkXDR/9S27ipSISDVV8hnXilRMaASFqkiJSGho/iqgUBUpEZFqqOSjAn4VE/oqsxKoYkK9y64ilUo2k07FWbl0uq68ioSL5i8f+6pIteLS7aS6mnnmlst15VVEqqaSV1zLVjHBzL4IfBGgubWjXP2rCVWREqkLFZm/Bo0aVK7+1YSqSIlIrVXyimupFRPOL1QxwTk31zk3zTk3LdZc3//Zq4qUSF2oyPzV0tFSkc5Wi6pIiUitVTJwrUjFhHqnKlIidUHzlw9VkRKRWqvYowKVqpjQCFRFSiTcNH8VpipSIlJLFa2cVYmKCY1CVaREwk3zV2GqIiUitaLKWSIiIiJSFxS4ioiIiEhdUOAqIiIiInVBgauIiIiI1AUFriIiIiJSFxS4ioiIiEhdUOAqIiIiInWhouu4ioiIiEiIdCWwN96qdS/6TVdcRURERKQuKHAVERERkbqgwFVERERE6oICVxERERGpCwpcRURERKQuKHAVERERkbqgwFVERERE6oICVxERERGpCwpcRURERKQuKHAVERERkbqgwFVERERE6oICVxERERGpCwpcRURERKQuKHAVERERkbqgwFVERERE6oICVxERERGpCwpcRURERKTszGy6ma0ws5VmdrXP55vN7IHM5581s6OKtanAVURERETKysyiwBzgXGAScLGZTcrb7Upgm3NuPHAXcHuxdhW4ioiIiEi5nQSsdM6tds51A78AZuTtMwP4Seb1AuBMM7O+GlXgKiIiIiLldhiwLuv9+sw2332cc0ngPWB4X43GythBEREREQmxHaktjz767o9GlKGpFjN7Puv9XOfc3Kz3fldOXd77IPvkUOAqIiIicoBwzk2v0qnWA2Oy3h8ObCiwz3oziwFDga19NapHBURERESk3J4DJpjZWDNrAi4CFubtsxC4LPP6AmCxc05XXEVERESkepxzSTO7CngUiAL3OueWm9lNwPPOuYXAPcDPzGwl3pXWi4q1q8BVRERERMrOOfcI8EjethuyXncCM0tpU48KiIiIiEhdUOAqIiIiInVBgauIiIiI1AUFriIiIiJSFxS4ioiIiEhdUOAqIiIiInVBgauIiIiI1AUFriIiIiJSFxS4ioiIiEhdqGjgambTzWyFma00s6t9Pt9sZg9kPv+smR1Vyf6IiASl+UtEJHwqFriaWRSYA5wLTAIu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\n",
      "text/plain": [
       "<Figure size 720x360 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "num_classes = 2\n",
    "x_train, y_train = get_data(num_classes=num_classes)\n",
    "x_train_adv, model = get_adversarial_examples(x_train, y_train, num_classes)\n",
    "plot_results(model, x_train, y_train, x_train_adv, num_classes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ZOO: 100%|██████████| 150/150 [00:07<00:00, 20.28it/s]\n"
     ]
    },
    {
     "data": {
      "image/png": "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/HPT2loq3cXwyKmk0l2tborIvKTYNDXPLCWbvIDMsOKTSCsoPlWmsZOItJNG3gM+/tw0ADMrPjdt/MHl7v6DkvJbgRsa2J6WOzC4blJ2y1P6tre6WSLzjWJTBUMPnU9y5x+BpXn6dzvo33QvSy7f1upmicw3ik9lNHYSkXbTyEvQG/LctLkqle5i+54N5DxONtdBzuNs37NBZ3NFmk+xqUxmuIuBv90I3gm5RXgqwcDtG7USLtJ8ik8lNHYSkXbUyBXwuj03rfBQ9PcBdCR669W+phpNLcYsCx4f32aWZTS1WNkuRZqrIbEpvnxRvdrXdKmDS/LPxE6d2GaxHKmDS5QpXKS5NHYqobGTiLSjRq6Az/S5addO9dw0d7/T3S9y94sSsbl51rMzcRT36IRt7lE6E0db1CKReashsSnW292QxjZDYsUQnpn4deCZCIkVQy1qkci8pbFTCY2dRKQdNXICPv7cNDNLkH9u2oS07CXPTbs26HPT5qpEPMm61ZuJWJpoZIyIpVm3erPO4Io0n2JTmVhvkv5N92KJFJGuMSyRon/TvVr9Fmk+xacSGjuJSDtq2CXo7p4xs+Jz06LAXcXnpgGPFlK3lz43DWBvkNTtc9UpfdvpW/Qco6nFdCaO6gtEpAUUmypbcvk2Fq5/ltTBJSRWDGnyLdICik+TaewkIu2mkfeA4+73A/eXbbu15P0VjTx+GCXiSX15iLSYYlNlsd6kJt4iLab4NJnGTiLSThp5CbqIiIiIiIiIFGgCLiIiIiIiItIEmoCLiIiIiIiINIEm4CIiIiIiIiJNoAm4iIiIiIiISBNoAi4iIiIiIiLSBJqAi4iIiIiIiDSBJuAiIiIiIiIiTaAJuIiIiIiIiEgTxFrdABERERERERGOp7Hn9re6FQ2lFXARERERERGRJtAEXERERERERKQJNAEXERERERERaQJNwEVERERERESaQBNwERERERERkSbQBFxERERERESkCTQBFxEREREREWkCTcBFREREREREmkATcBEREREREZEm0ARcREREREREpAk0ARcRERERERFpAk3ARURERERERJpAE3ARERERERGRJtAEXERERERERKQJNAEXERERERERaQJNwEVERERERESaQBNwERERERERkTJmdqWZ7TSzXWb28Qo/X2BmXyv8/BEzW12tTk3ARUREREREREqY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\n",
      "text/plain": [
       "<Figure size 1080x360 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "num_classes = 3\n",
    "x_train, y_train = get_data(num_classes=num_classes)\n",
    "x_train_adv, model = get_adversarial_examples(x_train, y_train, num_classes)\n",
    "plot_results(model, x_train, y_train, x_train_adv, num_classes)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3 Example: MNIST"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.1 Load and transform MNIST dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "(x_train, y_train), (x_test, y_test), min_, max_ = load_mnist()\n",
    "\n",
    "n_samples_train = x_train.shape[0]\n",
    "n_features_train = x_train.shape[1] * x_train.shape[2] * x_train.shape[3]\n",
    "n_samples_test = x_test.shape[0]\n",
    "n_features_test = x_test.shape[1] * x_test.shape[2] * x_test.shape[3]\n",
    "\n",
    "x_train = x_train.reshape(n_samples_train, n_features_train)\n",
    "x_test = x_test.reshape(n_samples_test, n_features_test)\n",
    "\n",
    "y_train = np.argmax(y_train, axis=1)\n",
    "y_test = np.argmax(y_test, axis=1)\n",
    "\n",
    "n_samples_max = 200\n",
    "x_train = x_train[0:n_samples_max]\n",
    "y_train = y_train[0:n_samples_max]\n",
    "x_test = x_test[0:n_samples_max]\n",
    "y_test = y_test[0:n_samples_max]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.2 Train LightGBMClassifier classifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1]\ttraining's multi_logloss: 2.08117\n",
      "[2]\ttraining's multi_logloss: 1.9099\n",
      "[3]\ttraining's multi_logloss: 1.75426\n",
      "[4]\ttraining's multi_logloss: 1.61072\n",
      "[5]\ttraining's multi_logloss: 1.48884\n",
      "[6]\ttraining's multi_logloss: 1.38206\n",
      "[7]\ttraining's multi_logloss: 1.28643\n",
      "[8]\ttraining's multi_logloss: 1.19899\n",
      "[9]\ttraining's multi_logloss: 1.11667\n",
      "[10]\ttraining's multi_logloss: 1.03082\n",
      "[11]\ttraining's multi_logloss: 0.958193\n",
      "[12]\ttraining's multi_logloss: 0.890689\n",
      "[13]\ttraining's multi_logloss: 0.827041\n",
      "[14]\ttraining's multi_logloss: 0.772012\n",
      "[15]\ttraining's multi_logloss: 0.719107\n",
      "[16]\ttraining's multi_logloss: 0.669513\n",
      "[17]\ttraining's multi_logloss: 0.624627\n",
      "[18]\ttraining's multi_logloss: 0.581928\n",
      "[19]\ttraining's multi_logloss: 0.542164\n",
      "[20]\ttraining's multi_logloss: 0.505364\n",
      "[21]\ttraining's multi_logloss: 0.472722\n",
      "[22]\ttraining's multi_logloss: 0.440549\n",
      "[23]\ttraining's multi_logloss: 0.413029\n",
      "[24]\ttraining's multi_logloss: 0.384772\n",
      "[25]\ttraining's multi_logloss: 0.359488\n"
     ]
    }
   ],
   "source": [
    "num_round = 25\n",
    "param = {'objective': 'multiclass', 'metric': 'multi_logloss', 'num_class': 10}\n",
    "train_data = lgb.Dataset(x_train, label=y_train)\n",
    "validation_data = train_data\n",
    "model = lgb.train(param, train_data, num_round, valid_sets=[validation_data])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.3 Create and apply Zeroth Order Optimization Attack with ART"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "art_classifier = LightGBMClassifier(model=model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "zoo = ZooAttack(classifier=art_classifier, confidence=0.0, targeted=False, learning_rate=1e-1, max_iter=100,\n",
    "                binary_search_steps=100, initial_const=1e-3, abort_early=True, use_resize=False, \n",
    "                use_importance=False, nb_parallel=10, batch_size=1, variable_h=0.25)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ZOO: 100%|██████████| 200/200 [24:12<00:00,  7.26s/it]\n"
     ]
    }
   ],
   "source": [
    "x_train_adv = zoo.generate(x_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ZOO: 100%|██████████| 200/200 [17:50<00:00,  5.35s/it]\n"
     ]
    }
   ],
   "source": [
    "x_test_adv = zoo.generate(x_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.4 Evaluate LightGBMClassifier on benign and adversarial samples"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Benign Training Score: 1.0000\n"
     ]
    }
   ],
   "source": [
    "y_pred = model.predict(x_train)\n",
    "score = np.sum(y_train == np.argmax(y_pred, axis=1)) / y_train.shape[0]\n",
    "print(\"Benign Training Score: %.4f\" % score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(x_train[0, :].reshape((28, 28)))\n",
    "plt.clim(0, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Benign Training Predicted Label: 5\n"
     ]
    }
   ],
   "source": [
    "prediction = np.argmax(model.predict(x_train[0:1, :]), axis=1)\n",
    "print(\"Benign Training Predicted Label: %i\" % prediction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adversarial Training Score: 0.8650\n"
     ]
    }
   ],
   "source": [
    "y_pred = model.predict(x_train_adv)\n",
    "score = np.sum(y_train == np.argmax(y_pred, axis=1)) / y_train.shape[0]\n",
    "print(\"Adversarial Training Score: %.4f\" % score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(x_train_adv[0, :].reshape((28, 28)))\n",
    "plt.clim(0, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adversarial Training Predicted Label: 3\n"
     ]
    }
   ],
   "source": [
    "prediction = np.argmax(model.predict(x_train_adv[0:1, :]), axis=1)\n",
    "print(\"Adversarial Training Predicted Label: %i\" % prediction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Benign Test Score: 0.6700\n"
     ]
    }
   ],
   "source": [
    "y_pred = model.predict(x_test)\n",
    "score = np.sum(y_test == np.argmax(y_pred, axis=1)) / y_test.shape[0]\n",
    "print(\"Benign Test Score: %.4f\" % score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(x_test[0, :].reshape((28, 28)))\n",
    "plt.clim(0, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Benign Test Predicted Label: 7\n"
     ]
    }
   ],
   "source": [
    "prediction = np.argmax(model.predict(x_test[0:1, :]), axis=1)\n",
    "print(\"Benign Test Predicted Label: %i\" % prediction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adversarial Test Score: 0.5800\n"
     ]
    }
   ],
   "source": [
    "y_pred = model.predict(x_test_adv)\n",
    "score = np.sum(y_test == np.argmax(y_pred, axis=1)) / y_test.shape[0]\n",
    "print(\"Adversarial Test Score: %.4f\" % score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(x_test_adv[0, :].reshape((28, 28)))\n",
    "plt.clim(0, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adversarial Test Predicted Label: 7\n"
     ]
    }
   ],
   "source": [
    "prediction = np.argmax(model.predict(x_test_adv[0:1, :]), axis=1)\n",
    "print(\"Adversarial Test Predicted Label: %i\" % prediction)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
